#include "sequence.h"

Sequence::Sequence()
{
}


Sequence::Sequence(
                        //CAMERASET
                          QString INPUT_FINAL_PATH_Cameras_IN,

                        //MODEL
                          QString RadioSequenceID_String_In,
                          QVector<QString> INPUT_ModelNamesQVect_IN,
                          QString INPUT_EXTENSSS_Mesh_IN,
                          QString INPUT_EXTENSSS_Skeleton_IN,
                          QString INPUT_EXTENSSS_Skin_IN,
                          QString INPUT_EXTENSSS_Limits_IN,
                          QString INPUT_EXTENSSS_VOI_IN,

                        //ANIMATION
                          QString RadioSequenceID_String_IN,
                          QString INPUT_EXTENSSS_Motion_IN,
                          QString INPUT_FINAL_PATH_IndexCheat_IN,

                        //VIDEO_SEQUENCE
                          QString INPUT_FINAL_PATH_Video_IN,
                          QString INPUT_FINAL_PATH_IndexCheat_INN,

                        //SEQUENCE
                          QString INPUT_FINAL_PATH_IndexCheat_INNN,
                          QString RadioSequenceID_String_INN
                  )
{

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

        cameraSet = CameraSet( INPUT_FINAL_PATH_Cameras_IN );

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

        Animation tmpAnim = Animation(
                                          //MODEL
                                            RadioSequenceID_String_In,
                                            INPUT_ModelNamesQVect_IN,
                                            INPUT_EXTENSSS_Mesh_IN,
                                            INPUT_EXTENSSS_Skeleton_IN,
                                            INPUT_EXTENSSS_Skin_IN,
                                            INPUT_EXTENSSS_Limits_IN,
                                            INPUT_EXTENSSS_VOI_IN,

                                          //ANIMATION
                                            RadioSequenceID_String_IN,
                                            INPUT_EXTENSSS_Motion_IN,
                                            INPUT_FINAL_PATH_IndexCheat_IN
                                     );

        posedAnimations.append( tmpAnim );
        posedAnimations.squeeze();

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

        videoSequence = VideoSequence(
                                           INPUT_FINAL_PATH_Video_IN,
                                           INPUT_FINAL_PATH_IndexCheat_INN
                                     );

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

        currentFrameNumber = 0;

        sequenceID_String = RadioSequenceID_String_INN;
        sequenceID        = sequenceID_String.toInt() - 1;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

        QFile myFile ( INPUT_FINAL_PATH_IndexCheat_INNN );

        myFile.open(QIODevice::ReadOnly);

        if( !myFile.isOpen() )
        {
            ErrorManager::error(3, INPUT_FINAL_PATH_IndexCheat_INNN);
            return;
        }

        QTextStream myStream(&myFile);

        QString dummyDescr;

        myStream >> dummyDescr;       myStream >> totalAllignedFrames;      posedAnimations[0].totalAllignedFrames = totalAllignedFrames;
        myStream >> dummyDescr;       myStream >> motionOffset;             posedAnimations[0].motionOffset        = motionOffset;
        myStream >> dummyDescr;       myStream >> videoOffset;              videoSequence.videoOffset              = videoOffset;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

}



/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


void Sequence::appendNewPosedAnimation( Animation posedAnimation_IN)
{
    posedAnimations.append( posedAnimation_IN );
}



void Sequence::removeAdditionalPosedAnimations()
{

        if (posedAnimations.size() > 1)
        {

                for (int i=1; i<posedAnimations.size(); i++)
                {
                    posedAnimations.remove(i);
                }

        }

}


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



void Sequence::transform_All_Model_MESHES()
{

    for (int i=0; i<posedAnimations.size(); i++)
    {
        posedAnimations[i].transform_ModelSet_MESHES( currentFrameNumber );
    }

}



void Sequence::transform_All_Model_SKELETONS()
{

    for (int i=0; i<posedAnimations.size(); i++)
    {
        posedAnimations[i].transform_ModelSet_SKELETONS( currentFrameNumber );
    }

}



void Sequence::calculate_All_Model_ROTATION_AXES()
{

    for (int i=0; i<posedAnimations.size(); i++)
    {
        posedAnimations[i].calculate_RotationAxes( currentFrameNumber );
    }

}



/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



void Sequence::updateFrameNumber()
{

        currentFrameNumber++;

        if (currentFrameNumber <  0   ||   currentFrameNumber >= totalAllignedFrames)
        {
            currentFrameNumber = 0;


        }

}


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////




void Sequence::loadCurrentVIDEOFrame()
{
        videoSequence.loadCurrentFrame( cameraSet.currentCameraID, currentFrameNumber );
}



void Sequence::loadCurrentVIDEOFrame_FOR_TRACKER()
{
        videoSequence.loadCurrentFrame( cameraSet.currentCameraID, currentFrameNumber + 1 );
}



void Sequence::loadCurrentVIDEOFrame_CUSTOM_FRAMENUMBER( int customFrameNumber )
{
        videoSequence.loadCurrentFrame( cameraSet.currentCameraID, customFrameNumber );
}



/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

